
package br.com.cinesystem.control;

import br.com.cinesystem.entity.Ingresso;
import br.com.cinesystem.entity.Sessao;
import br.com.cinesystem.entity.Usuario;
import br.com.cinesystem.entity.Venda;
import br.com.cinesystem.persistence.IngressoDao;
import br.com.cinesystem.persistence.SessaoDao;
import br.com.cinesystem.persistence.UsuarioDao;
import br.com.cinesystem.persistence.VendaDao;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Calendar;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class ManterVenda extends HttpServlet {
   
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();

        String cmd = request.getParameter("cmd");

        if(cmd.equals("carrinho")){

            SessaoDao sd = null;
            VendaDao vd = null;

            HttpSession session = request.getSession(true);

            Usuario u = (Usuario) request.getSession().getAttribute("sessao");
            
            String destino = "carrinho.jsp";
            try{

                sd = new SessaoDao();
                vd = new VendaDao();
                if(u!=null){

                    if(u.getPerfil()==1){
                        destino = "cliente/carrinho.jsp";
                    }else if(u.getPerfil()==2){
                        destino = "funcionario/carrinho.jsp";
                    }else if(u.getPerfil()==3){
                        destino = "admin/carrinho.jsp";
                    }

                    Sessao ses = new Sessao();

                    ses.setIdSessao(Integer.parseInt(request.getParameter("id")));

                    ses = sd.buscar(ses);

                    Venda venda = new Venda();
                    Calendar data = Calendar.getInstance();

                    venda.setUsuario(u);
                    venda.setData(data.getTime());
                    venda.setHora(data.getTime());

                    Venda venda2 = vd.verificarCarrinho(venda);
                    
                    if(venda2==null){
                        
                        venda2 = vd.salvar(venda);

                    }
                    
                    request.setAttribute("session", ses);
                    request.setAttribute("venda", venda2);

                }else{
                    request.setAttribute("idsessao", request.getParameter("id"));
                    destino = "login.jsp";
                    throw new Exception("*Você deve estar logado no sistema para efetuar uma compra!");
                }

            }catch (Exception e){

                request.setAttribute("mensagem", e.getMessage());

            }finally{

                request.getRequestDispatcher(destino).forward(request, response);

            }
        }

        if(cmd.equals("cadastrarPedido")){

            SessaoDao sd = null;
            VendaDao vd = null;
            IngressoDao idao = null;
            UsuarioDao ud = new UsuarioDao();

            HttpSession session = request.getSession(true);

            Usuario u = (Usuario) request.getSession().getAttribute("sessao");


            String destino = "carrinho.jsp";
            try{
                Usuario usuario = ud.buscar(u);

                sd = new SessaoDao();
                vd = new VendaDao();
                idao = new IngressoDao();

                if(u!=null){

                    if(u.getPerfil()==1){
                        destino = "cliente/carrinho.jsp";
                    }else if(u.getPerfil()==2){
                        destino = "funcionario/carrinho.jsp";
                    }else if(u.getPerfil()==3){
                        destino = "admin/carrinho.jsp";
                    }

                    Sessao ses = new Sessao();

                    ses.setIdSessao(Integer.parseInt(request.getParameter("idsessao")));
                    
                    ses = sd.buscar(ses);

                    Venda venda = new Venda();

                    venda.setIdVenda(Integer.parseInt(request.getParameter("idvenda")));
                    
                    Integer inteira = Integer.parseInt(request.getParameter("inteira"));
                    Integer midoso = Integer.parseInt(request.getParameter("midoso"));
                    Integer mestudante = Integer.parseInt(request.getParameter("mestudante"));
                    Integer mmenor = Integer.parseInt(request.getParameter("mmenor"));

                    request.setAttribute("session", ses);
                    request.setAttribute("venda", venda);

                    Integer total = inteira+midoso+mestudante+mmenor;
                    
                    
                    List<Ingresso> lista = idao.buscarPorSessao(ses);
                    
                    
                    if(total==0){
                        
                        request.setAttribute("id", ses.getIdSessao());
                        throw new Exception("*Você deve selecionar um tipo de ingresso!");

                    }else{

                        if(total>8){
                            request.setAttribute("id", ses.getIdSessao());
                            throw new Exception("*Só é permitido a compra de 8 ingressos por compra!");

                        }else{
                            if(lista.size()+total>ses.getSala().getCapacidade()){
                                
                                int soma = ses.getSala().getCapacidade()-lista.size();
                                request.setAttribute("id", ses.getIdSessao());
                                throw new Exception("*Só há "+ soma + " lugar(es) disponíveis nessa Sessão!");

                            }else{

                                if(inteira>0){
                                    for(int i=1;i<=inteira;i++){
                                        Ingresso ingresso = new Ingresso();
                                        ingresso.setSessao(new Sessao());
                                        ingresso.setVenda(new Venda());
                                        ingresso.getSessao().setIdSessao(ses.getIdSessao());
                                        ingresso.getVenda().setIdVenda(venda.getIdVenda());
                                        ingresso.setTipo("INTEIRA");
                                        ingresso.setValor(ses.getPreco());
                                        
                                        idao.salvar(ingresso);
                                    }
                                }
                                if(midoso>0){
                                    for(int i=1;i<=midoso;i++){
                                        Ingresso ingresso = new Ingresso();
                                        ingresso.setSessao(new Sessao());
                                        ingresso.setVenda(new Venda());
                                        ingresso.getSessao().setIdSessao(ses.getIdSessao());
                                        ingresso.getVenda().setIdVenda(venda.getIdVenda());
                                        ingresso.setTipo("M IDOSO");
                                        ingresso.setValor(ses.getPreco()/2);

                                        idao.salvar(ingresso);
                                    }
                                }
                                if(mestudante>0){
                                    for(int i=1;i<=mestudante;i++){
                                        Ingresso ingresso = new Ingresso();
                                        ingresso.setSessao(new Sessao());
                                        ingresso.setVenda(new Venda());
                                        ingresso.getSessao().setIdSessao(ses.getIdSessao());
                                        ingresso.getVenda().setIdVenda(venda.getIdVenda());
                                        ingresso.setTipo("M ESTUD");
                                        ingresso.setValor(ses.getPreco()/2);

                                        idao.salvar(ingresso);
                                    }
                                }
                                if(mmenor>0){
                                    for(int i=1;i<=mmenor;i++){
                                        Ingresso ingresso = new Ingresso();
                                        ingresso.setSessao(new Sessao());
                                        ingresso.setVenda(new Venda());
                                        ingresso.getSessao().setIdSessao(ses.getIdSessao());
                                        ingresso.getVenda().setIdVenda(venda.getIdVenda());
                                        ingresso.setTipo("M MENOR");
                                        ingresso.setValor(ses.getPreco()/2);

                                        idao.salvar(ingresso);
                                    }
                               }
                            }
                            
                            List<Ingresso> lista2 = idao.buscarPorVenda(venda);
                            
                            if(u.getPerfil()==1){
                                destino = "cliente/carrinho_confirma.jsp";
                            }else if(u.getPerfil()==2){
                                destino = "funcionario/carrinho_confirma.jsp";
                            }else if(u.getPerfil()==3){
                                destino = "admin/carrinho_confirma.jsp";
                            }

                            request.setAttribute("ingressos", lista2);
                            request.setAttribute("usuario", usuario);
                        }
                    }



                }else{
                    destino = "login.jsp";
                    throw new Exception("*Você deve estar logado no sistema para efetuar uma compra!");
                }

            }catch (Exception e){

                request.setAttribute("mensagem", e.getMessage());

            }finally{

                request.getRequestDispatcher(destino).forward(request, response);

            }
        }

        if(cmd.equals("excluir")){

            SessaoDao sd = null;
            VendaDao vd = null;
            IngressoDao idao = null;
            UsuarioDao ud = new UsuarioDao();

            HttpSession session = request.getSession(true);

            Usuario u = (Usuario) request.getSession().getAttribute("sessao");

            String destino = "carrinho.jsp";
            try{
                Usuario usuario = ud.buscar(u);
                sd = new SessaoDao();
                vd = new VendaDao();
                idao = new IngressoDao();

                if(u!=null){

                    if(u.getPerfil()==1){
                        destino = "cliente/carrinho_confirma.jsp";
                    }else if(u.getPerfil()==2){
                        destino = "funcionario/carrinho_confirma.jsp";
                    }else if(u.getPerfil()==3){
                        destino = "admin/carrinho_confirma.jsp";
                    }

                    Ingresso ingresso = new Ingresso();

                    ingresso.setIdIngresso(Integer.parseInt(request.getParameter("id")));

                    idao.excluir(ingresso);

                    Venda venda = new Venda();

                    venda.setIdVenda(Integer.parseInt(request.getParameter("idvenda")));
                    out.print("teste");
                    List<Ingresso> lista = idao.buscarPorVenda(venda);

                    
                    request.setAttribute("ingressos", lista);
                    request.setAttribute("usuario", usuario);

                }else{
                    destino = "login.jsp";
                    throw new Exception("*Você deve estar logado no sistema para efetuar uma compra!");
                }

            }catch (Exception e){

                request.setAttribute("mensagem", e.getMessage());

            }finally{

                request.getRequestDispatcher(destino).forward(request, response);

            }
        }

        if(cmd.equals("verCarrinho")){

            SessaoDao sd = null;
            VendaDao vd = null;
            IngressoDao idao = null;
            UsuarioDao ud = new UsuarioDao();

            HttpSession session = request.getSession(true);

            Usuario u = (Usuario) request.getSession().getAttribute("sessao");

            String destino = "carrinho.jsp";
            try{
                Usuario usuario = ud.buscar(u);
                sd = new SessaoDao();
                vd = new VendaDao();
                idao = new IngressoDao();

                if(u!=null){

                    if(u.getPerfil()==1){
                        destino = "cliente/carrinho_confirma.jsp";
                    }else if(u.getPerfil()==2){
                        destino = "funcionario/carrinho_confirma.jsp";
                    }else if(u.getPerfil()==3){
                        destino = "admin/carrinho_confirma.jsp";
                    }


                    Venda venda = new Venda();

                    venda.setData(null);
                    venda.setHora(null);
                    venda.setUsuario(new Usuario());
                    venda.getUsuario().setIdUsuario(u.getIdUsuario());
                    
                    List<Ingresso> lista = idao.buscarPorVenda(vd.verificarCarrinho(venda));

                    String cep = null;
                    cep = usuario.getEndereco().getCep().replace("-", "");
                    usuario.getEndereco().setCep(cep);
                    request.setAttribute("ingressos", lista);
                    request.setAttribute("usuario", usuario);

                }else{
                    destino = "login.jsp";
                    throw new Exception("*Você deve estar logado no sistema para efetuar uma compra!");
                }

            }catch (Exception e){

                request.setAttribute("mensagem", e.getMessage());

            }finally{

                request.getRequestDispatcher(destino).forward(request, response);

            }
        }
        if(cmd.equals("verIngressos")){

            SessaoDao sd = null;
            VendaDao vd = null;
            IngressoDao idao = null;

            HttpSession session = request.getSession(true);

            Usuario u = (Usuario) request.getSession().getAttribute("sessao");

            String destino = "ingresso.jsp";
            try{

                sd = new SessaoDao();
                vd = new VendaDao();
                vd = new VendaDao();

                if(u!=null){

                    if(u.getPerfil()==1){
                        destino = "cliente/ingresso.jsp";
                    }else if(u.getPerfil()==2){
                        destino = "funcionario/ingresso.jsp";
                    }else if(u.getPerfil()==3){
                        destino = "admin/ingresso.jsp";
                    }


                    Venda venda = new Venda();


                    venda.setUsuario(new Usuario());
                    venda.getUsuario().setIdUsuario(u.getIdUsuario());

                    List<Venda> lista = vd.buscarVendas(venda.getUsuario());


                    request.setAttribute("ingressos", lista);

                }else{
                    destino = "login.jsp";
                    throw new Exception("*Você deve estar logado no sistema para efetuar uma compra!");
                }

            }catch (Exception e){

                request.setAttribute("mensagem", e.getMessage());

            }finally{

                request.getRequestDispatcher(destino).forward(request, response);

            }
        }

    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }

}
